using System;
using System.Runtime.InteropServices;

namespace qPrintComponent
{   
    public enum Page_Orientation : short
    {
        PORTRAIT = 1,
        LANDSCAPE = 2
    }

    public enum Page_Duplex : short
    {
        SIMPLEX = 1,
        VERTICAL = 2,
        HORIZONTAL = 3
    }
    public enum Printer_Collate : short
    {
        FALSE = 0,
        TRUE = 1
    }
    public enum Printer_ICMIntend : short
    {
        SATURATE = 1,
        CONTRAST = 2,
        COLORMETRIC = 3,
        USER = 0x100
    }
    public enum Printer_ICMMethod : short
    {
        NONE = 1,
        SYSTEM = 2,
        DRIVER = 3,
        DEVICE = 4,
        USER = 0x100
    }
    public enum Printer_Dither : short
    {
        None = 0,
        NONE = 1,
        COARSE = 2, 
        FINE = 3,
        LINEART = 4,
        GRAYSCALE = 5,
        USER = 0x100
    }
    public enum Printer_Media : short
    {
        STANDARD = 1,
        TRANSPARENCY = 2,
        GLOSSY = 3,
        USER = 0x100    
    }
    public enum Paper_Source : short
    {
        FIRST = UPPER,
        UPPER = 1,
        ONLYONE = 1,
        LOWER = 2,
        MIDDLE = 3,
        MANUAL = 4,
        ENVELOPE = 5,
        ENVMANUAL = 6,
        AUTO = 7,
        TRACTOR = 8,
        SMALLFMT = 9,
        LARGEFMT = 10,
        LARGECAPACITY = 11,
        CASSETTE = 14,
        FORMSOURCE = 15,
        LAST = FORMSOURCE,
        user = 256
    }

    public enum Print_Color : short
    {
        /* color enable/disable for color printers */
        MONOCHROME = 1,
        COLOR = 2,
    }
    public enum Print_TrueType : short
    {
        BITMAP = 1,
        DOWNLOAD = 2,
        SUBDEV = 3,
        DOWNLOAD_OUTLINE = 4,
    }


    public enum PrinterControl : int
    {
        Nul = 0,
        Pause = 1,
        Resume = 2,
        Purge = 3,
        SetStatus = 4
    }

    [Flags]
    public enum Printer_Change : uint
    {
        ADD_PRINTER =             0x00000001,
        SET_PRINTER  =            0x00000002,
        DELETE_PRINTER=           0x00000004,
        FAILED_CONNECTION_PRINTER  =  0x00000008,
        PRINTER               =   0x000000FF,
        ADD_JOB               =   0x00000100,
        SET_JOB               =   0x00000200,
        DELETE_JOB            =   0x00000400,
        WRITE_JOB             =   0x00000800,
        JOB                   =   0x0000FF00,
        ADD_FORM              =   0x00010000,
        SET_FORM              =   0x00020000,
        DELETE_FORM           =   0x00040000,
        FORM                  =   0x00070000,
        ADD_PORT              =   0x00100000,
        CONFIGURE_PORT        =   0x00200000,
        DELETE_PORT           =   0x00400000,
        PORT                  =   0x00700000,
        ADD_PRINT_PROCESSOR    =  0x01000000,
        DELETE_PRINT_PROCESSOR  = 0x04000000,
        PRINT_PROCESSOR         = 0x07000000,
        ADD_PRINTER_DRIVER      = 0x10000000,
        SET_PRINTER_DRIVER      = 0x20000000,
        DELETE_PRINTER_DRIVER   = 0x40000000,
        PRINTER_DRIVER          = 0x70000000,
        TIMEOUT                 = 0x80000000,
        ALL                     = 0x7777FFFF
}
    public enum Printer_Notification_Types : short
    {
        PRINTER_NOTIFY_TYPE = 0,
        JOB_NOTIFY_TYPE = 1
    }
    public enum Printer_Notify_Field_Indexes
    {
        SERVER_NAME = 0,
        PRINTER_NAME = 1,
        SHARE_NAME = 2,
        PORT_NAME = 3,
        DRIVER_NAME = 4,
        COMMENT = 5,
        LOCATION = 6,
        DEVMODE = 7,
        SEPFILE = 8,
        PRINT_PROCESSOR = 9,
        PARAMETERS = 10,
        DATATYPE = 11,
        SECURITY_DESCRIPTOR = 12,
        ATTRIBUTES = 13,
        PRIORITY = 14,
        DEFAULT_PRIORITY = 15,
        START_TIME = 16,
        UNTIL_TIME = 17,
        STATUS = 18,
        STATUS_STRING = 19,
        CJOBS = 20,
        AVERAGE_PPM = 21,
        TOTAL_PAGES = 22,
        PAGES_PRINTED = 23,
        TOTAL_BYTES = 24,
        BYTES_PRINTED = 25,
        OBJECT_GUID = 26
    }

    public enum Job_Notify_Field_Indexes
    {
        PRINTER_NAME = 0,
        MACHINE_NAME = 1,
        PORT_NAME = 2,
        USER_NAME = 3,
        NOTIFY_NAME = 4,
        DATATYPE = 5,
        PRINT_PROCESSOR = 6,
        PARAMETERS = 7,
        DRIVER_NAME = 8,
        DEVMODE = 9,
        STATUS = 10,
        STATUS_STRING = 11,
        SECURITY_DESCRIPTOR = 12,
        DOCUMENT = 13,
        PRIORITY = 14,
        POSITION = 15,
        SUBMITTED = 16,
        START_TIME = 17,
        UNTIL_TIME = 18,
        TIME = 19,
        TOTAL_PAGES = 20,
        PAGES_PRINTED = 21,
        TOTAL_BYTES = 22,
        BYTES_PRINTED = 23//,
        //ERROR = 999
    }
    [Flags]
    public enum Job_Status
    {
        BLOCKED_DEVICEQUEUE = 0x200,
        DELETED = 0x100,
        DELETING = 4,
        ERROR = 2,
        OFFLINE = 0x20,
        PAPEROUT = 0x40,
        PAUSED = 1,
        PRINTED = 0x80,
        PRINTING = 0x10,
        RESTART = 0x800,
        SPOOLING = 8,
        INTERVENTION = 0x400
    }

}
